package image.filter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MedianFilter extends Filter {
	public MedianFilter(int dimension) {
		this.dimension = dimension;
	}

	@Override
	protected int calculateValue(int[][] mask) {
		List<Integer> values = new ArrayList<Integer>(mask.length
				* mask[0].length);
		for (int i = 0; i < mask.length; i++) {
			for (int j = 0; j < mask[0].length; j++) {
				values.add(mask[i][j]);
			}
		}
		Collections.sort(values);
		int median = 0;
		if (values.size() % 2 == 0) {
			int v1 = values.get(values.size() / 2);
			int v2 = values.get(values.size() / 2 - 1);
			median = (int) (Math.floor((double) (v1 + v2)) / 2);
		} else {
			median = values.get(values.size() / 2);
		}
		return median;
	}

}
